﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using nmConnectionDatabase;
using nmVentas;
using nmArticulosVenta;
using nmFactura;

namespace DarkPassenger
{
    public partial class MenuFacturacion : Form
    {
        string Usuario = "";
        ConexionDB Conexion = new ConexionDB("Data Source=localhost;Initial Catalog=TPVideoJuegos;Integrated Security=True");
        Ventas objVentas = new Ventas();
        ArticulosVentas objArticulosVentas = new ArticulosVentas();

        public MenuFacturacion()
        {
            InitializeComponent();
            
        }


        public MenuFacturacion(string Usuario)
        {
            InitializeComponent();
            this.Usuario = Usuario;
        }

        public void GenerarNumeroFactura()
        {
            string NumFactura;
            string consultaSQL = @"Select MAX(NumFactura) + 1 FROM Ventas";
            Conexion.CargarDataSet(consultaSQL, "Ventas");
            NumFactura = Conexion.GetDataSet().Tables[0].Rows[0].ItemArray[0].ToString();
            while (!(NumFactura.Length == 8))
            {
                NumFactura = "0" + NumFactura;
            }
            txtNumFactura.Text = NumFactura;
        }

        public void CargarDNIClientes()
        {
            int cantRows;
            string dni;
            string consultaSQL = @"Select DNI FROM Clientes";
            Conexion.CargarDataSet(consultaSQL, "Clientes");
            cantRows = Conexion.GetDataSet().Tables[0].Rows.Count;
            cmbDNICliente.Items.Clear();
            for(int i=0; i < cantRows ;i++)
            {
                dni = Conexion.GetDataSet().Tables[0].Rows[i].ItemArray[0].ToString();
                cmbDNICliente.Items.Add(dni);
            }
            Autocomplete.SetAutcomplete(ref cmbDNICliente, ref Conexion, "DNI");
        }

        public void CargarIDUsuarios()
        {
            int cantRows;
            string idUsuario;
            string consultaSQL = @"Select IDUsuario FROM Usuarios";
            Conexion.CargarDataSet(consultaSQL, "Usuarios");
            cantRows = Conexion.GetDataSet().Tables[0].Rows.Count;
            for (int i = 0; i < cantRows; i++)
            {
                idUsuario = Conexion.GetDataSet().Tables[0].Rows[i].ItemArray[0].ToString();
                cmbIDUsuario.Items.Add(idUsuario); 
            }
            Autocomplete.SetAutcomplete(ref cmbIDUsuario, ref Conexion, "IDUsuario");
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            bool error = false;

            //SE VERIFICA QUE EL FORM TENGA LA INFORMACION CORRECTA

            if (txtDNICliente.Text.Trim() == "")
            {
                error = true;
            }

            if (txtIDUsuario.Text.Trim() == "")
            {
                error = true;
            }

            if (chkCredito.Checked == false && chkEfectivo.Checked == false && chkEfectivo.Checked == false)
            {
                error = true;
            }

            if (lstProductos.Items.Count <= 0)
            {
                error = true;
            }

            if (error == true)
            {
                MessageBox.Show("Complete correctamente los campos");
            }

            else
            {

                ////////// AGREGAR VENTA /////////
                objVentas.setNumFactura(txtNumFactura.Text);
                objVentas.setDNICliente(cmbDNICliente.Text);
                objVentas.setIDUsuario(cmbIDUsuario.Text);
                if (chkEfectivo.Checked) objVentas.setFormaPago("Efectivo");
                if (chkDebito.Checked) objVentas.setFormaPago("Debito");
                if (chkCredito.Checked) objVentas.setFormaPago("Credito");
                objVentas.setFecha(dpkFecha.Value.Date);
                objVentas.setImporte(float.Parse(txtImporte.Text));

                objVentas.Agregar(Conexion.GetRutaConexion());

                ////////// AGREGAR ARTICULO X VENTA /////////
                foreach (ListViewItem listViewItem in lstProductos.Items)
                {
                    objArticulosVentas.setTipoProducto(listViewItem.SubItems[0].Text.ToString().Substring(0, 1));
                    objArticulosVentas.setIDConsola(listViewItem.SubItems[0].Text.ToString().Substring(1, 2));
                    objArticulosVentas.setIDProducto(listViewItem.SubItems[0].Text.ToString().Substring(3, 4));
                    objArticulosVentas.setNumFactura(txtNumFactura.Text.ToString());
                    objArticulosVentas.setCantidad(int.Parse(listViewItem.SubItems[4].Text.ToString()));
                    objArticulosVentas.setPrecio(float.Parse(listViewItem.SubItems[3].Text.ToString()));
                    objArticulosVentas.AgregarArticulo(Conexion.GetRutaConexion());
                }

                Factura objFactura = new Factura(txtNumFactura.Text, Conexion);
                objFactura.GenerarFactura();
                System.Diagnostics.Process.Start("facturas\\" + txtNumFactura.Text + ".pdf");

                this.Close();

            }
        }

        private void chkEfectivo_CheckedChanged(object sender, EventArgs e)
        {
            if (chkEfectivo.Checked)
            {
                chkDebito.Checked = false;
                chkCredito.Checked = false;
            }
        }

        private void chkDebito_CheckedChanged(object sender, EventArgs e)
        {
            if (chkDebito.Checked)
            {
                chkEfectivo.Checked = false;
                chkCredito.Checked = false;
            }
        }

        private void chkCredito_CheckedChanged(object sender, EventArgs e)
        {
            if (chkCredito.Checked)
            {
                chkDebito.Checked = false;
                chkEfectivo.Checked = false;
            }
        }

        private void cmbDNICliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            string consultaSQL = @"Select Nombre + ' ' + Apellido FROM Clientes WHERE DNI = '" + cmbDNICliente.Text + "'";
            Conexion.CargarDataSet(consultaSQL, "Clientes");
            txtDNICliente.Text = Conexion.GetDataSet().Tables[0].Rows[0].ItemArray[0].ToString();
            if (txtDNICliente.Text == "No Registrado No Registrado") txtDNICliente.Text = "No Registrado";
        }

        private void cmbIDUsuario_SelectedIndexChanged(object sender, EventArgs e)
        {
            string consultaSQL = @"Select Nombre + ' ' + Apellido FROM Usuarios WHERE IDUsuario = '" + cmbIDUsuario.Text + "'";
            Conexion.CargarDataSet(consultaSQL, "Usuarios");
            txtIDUsuario.Text = Conexion.GetDataSet().Tables[0].Rows[0].ItemArray[0].ToString();
        }

        private void btnQuitarProducto_Click(object sender, EventArgs e)
        {

            foreach (ListViewItem item in lstProductos.SelectedItems)
            {
                item.Remove();
            }

            CalcularPrecioFinal();


//            foreach (ListViewItem listViewItem in lstProductos.SelectedItems)
//            {
//                listViewItem.Remove();
//            }

//            txtImporte.Text = "0";

//            foreach (ListViewItem listViewItem in lstProductos.Items)
//            {
//                decimal importe = decimal.Parse(txtImporte.Text);
//                string tipoProducto = listViewItem.SubItems[0].Text.ToString().Substring(0, 1);
//                string idConsola = listViewItem.SubItems[0].Text.ToString().Substring(1, 2);
//                string idProducto = listViewItem.SubItems[0].Text.ToString().Substring(3, 4);
//                string cantidad = listViewItem.SubItems[1].Text.ToString();
//                string consultaSQL = @"Select Precio FROM ProductosXConsola WHERE TipoProducto = '" + tipoProducto + @"'
//                                         AND IDConsola = '" + idConsola + "' AND IDProducto = '" + idProducto + "'";
//                Conexion.CargarDataSet(consultaSQL, "ProductosXConsola");
//                string precio = Conexion.GetDataSet().Tables[0].Rows[0].ItemArray[0].ToString();
//                importe = (decimal.Parse(precio) * int.Parse(cantidad)) + importe;
//                txtImporte.Text = importe.ToString();
//            }
        }

        private void CalcularPrecioFinal()
        {
            decimal PrecioTotal = 0;

            foreach (ListViewItem item in lstProductos.Items)
            {
                decimal PrecioProducto = Convert.ToDecimal(item.SubItems[3].Text) * Convert.ToDecimal(item.SubItems[4].Text);
                PrecioTotal += PrecioProducto;
            }

            txtImporte.Text = PrecioTotal.ToString();
        }

        private void btnAgregarProducto_Click(object sender, EventArgs e)
        {
            MenuFacturacion_AgregarNuevoProducto form_AGN = new MenuFacturacion_AgregarNuevoProducto(Conexion, ref lstProductos);
            form_AGN.ShowDialog();

            CalcularPrecioFinal();


            // ************ 
            // COMENTO EL CODIGO DE MATIAS POR LAS DUDAS, VOY A CAMBIARLO COMO DIJIMOS EN CLASE (CHRISTIAN)
            // **************

//            MenuFacturacion_AgregarProducto AgregarProducto = new MenuFacturacion_AgregarProducto();
//            AgregarProducto.StartPosition = FormStartPosition.CenterParent;
//            AgregarProducto.ShowDialog();
            
//            string IDProducto = AgregarProducto.returnID;
//            string Cantidad = AgregarProducto.returnCant;
//            string Descripcion = AgregarProducto.returnDesc;
            
//            AgregarProducto.Dispose();
//            if(!(IDProducto == "" || Cantidad == "" || Descripcion == ""))
//            {
//                var item = new ListViewItem(new[] { IDProducto, Cantidad, Descripcion });
//                lstProductos.Items.Add(item);
//                txtImporte.Text = "0";

//                foreach (ListViewItem listViewItem in lstProductos.Items)
//                {
//                        decimal importe = decimal.Parse(txtImporte.Text);
//                        string tipoProducto = listViewItem.SubItems[0].Text.ToString().Substring(0, 1);
//                        string idConsola = listViewItem.SubItems[0].Text.ToString().Substring(1, 2);
//                        string idProducto = listViewItem.SubItems[0].Text.ToString().Substring(3, 4);
//                        string cantidad = listViewItem.SubItems[1].Text.ToString();
//                        string consultaSQL = @"Select Precio FROM ProductosXConsola WHERE TipoProducto = '" + tipoProducto + @"'
//                                         AND IDConsola = '" + idConsola + "' AND IDProducto = '" + idProducto + "'";
//                        Conexion.CargarDataSet(consultaSQL, "ProductosXConsola");
//                        string precio = Conexion.GetDataSet().Tables[0].Rows[0].ItemArray[0].ToString();
//                        importe = (decimal.Parse(precio) * int.Parse(cantidad)) + importe;
//                        txtImporte.Text = importe.ToString();
//                }
//            }
        }

        private void cmbDNICliente_TextChanged(object sender, EventArgs e)
        {
            string consultaSQL = @"Select Nombre + ' ' + Apellido FROM Clientes WHERE DNI = '" + cmbDNICliente.Text + "'";
            Conexion.CargarDataSet(consultaSQL, "Clientes");
            try { txtDNICliente.Text = Conexion.GetDataSet().Tables[0].Rows[0].ItemArray[0].ToString(); }
            catch { txtDNICliente.Text = ""; }
            if (txtDNICliente.Text == "No Registrado No Registrado") txtDNICliente.Text = "No Registrado";
        }

        private void cmbIDUsuario_TextChanged(object sender, EventArgs e)
        {
            string consultaSQL = @"Select Nombre + ' ' + Apellido FROM Usuarios WHERE IDUsuario = '" + cmbIDUsuario.Text + "'";
            Conexion.CargarDataSet(consultaSQL, "Usuarios");
            try { txtIDUsuario.Text = Conexion.GetDataSet().Tables[0].Rows[0].ItemArray[0].ToString(); }
            catch { txtIDUsuario.Text = ""; }
        }

        private void MenuFacturacion_Load(object sender, EventArgs e)
        {
            GenerarNumeroFactura();
            CargarDNIClientes();
            CargarIDUsuarios();
            txtImporte.Text = "0";
            dpkFecha.Text = DateTime.Now.ToShortDateString();
            cmbIDUsuario.Text = Usuario;
            cmbIDUsuario.Enabled = false;
            dpkFecha.Enabled = false;
            cmbDNICliente.SelectedIndex = 0;
        }

        private void btnClientes_Click(object sender, EventArgs e)
        {
            MenuClientes frmClientes = new MenuClientes();
            this.Hide();
            frmClientes.ShowDialog();
            CargarDNIClientes();
            this.Show();
        }

    }
}
